import os
import platform
from pathlib import Path

def _find_deveco_studio_base_path() -> Path | None:
    """
    通过扫描系统 PATH 环境变量，智能地查找并返回 DevEco Studio 的安装根目录。

    一个目录被识别为根目录的标志是，它必须同时包含 'sdk' 和 'tools' 两个子文件夹。
    """
    try:
        current_path_env = os.environ.get('PATH', '')
        path_entries = current_path_env.split(os.pathsep)
    except Exception:
        return None

    for entry in path_entries:
        # 为了提高效率，只对包含 "deveco" 关键词的路径进行深度搜索
        if 'deveco' in entry.lower():
            current_path = Path(entry)
            # 从当前路径开始，向上查找最多5层，以防万一
            for _ in range(5):
                if current_path.is_dir():
                    # 检查是否同时存在 'sdk' 和 'tools' 子目录
                    sdk_path = current_path / 'sdk'
                    tools_path = current_path / 'tools'
                    if sdk_path.is_dir() and tools_path.is_dir():
                        return current_path.resolve()  # 找到符合条件的根目录

                # 如果已到达文件系统根节点 (e.g., C:\)，则停止向上查找
                if current_path.parent == current_path:
                    break
                current_path = current_path.parent
    return None

def harmonyOS_env_check():
    """
    一键检查鸿蒙（HarmonyOS）开发相关的环境变量。

    本函数会自动检测 DevEco Studio 的安装路径，并验证 hvigor, ohpm,
    以及 SDK toolchains 等关键工具的路径是否已正确配置在系统 PATH 环境变量中。

    返回:
        list[str]: 一个包含详细检查结果的字符串列表。
    """
    # 此检查主要针对 Windows 系统
    if platform.system() != "Windows":
        return ["[!] Note: This HarmonyOS environment check is designed for Windows."]

    results = ["--- HarmonyOS / DevEco Studio Environment Check ---"]

    # 1. 定位 DevEco Studio 根目录
    deveco_base = _find_deveco_studio_base_path()

    if not deveco_base:
        results.append("❌ 未能从 PATH 环境变量中自动定位 DevEco Studio 的安装目录。")
        results.append("   - 请确保 DevEco Studio 已安装，并将其工具路径（如hvigor\\bin）添加到了系统环境变量中。")
        return results

    results.append(f"✅ 成功定位 DevEco Studio 根目录: {deveco_base}")

    # 2. 定义需要检查的关键相对路径
    # (路径, 是否必须在PATH中, 描述)
    paths_to_verify = [
        (Path("tools"), False, "Tools 主目录"),
        (Path("tools") / "hvigor" / "bin", True, "Hvigor Wrapper"),
        (Path("tools") / "ohpm" / "bin", True, "OpenHarmony Package Manager"),
        (Path("sdk") / "default" / "openharmony" / "toolchains", False, "OpenHarmony SDK Toolchains"),
    ]

    # 3. 获取当前所有环境变量路径，并进行标准化处理以方便比较
    current_path_env = os.environ.get('PATH', '')
    # 使用集合（set）可以极大地提高查找效率
    path_entries_set = {str(Path(p).resolve()).lower() for p in current_path_env.split(os.pathsep) if p}

    all_paths_ok = True
    results.append("\n[*] 正在进行详细路径检查...")

    for rel_path, must_be_in_path, description in paths_to_verify:
        full_path = (deveco_base / rel_path).resolve()

        # 检查一：路径在物理磁盘上是否存在
        if not full_path.is_dir():
            results.append(f"❌ [{description}] 路径不存在: {full_path}")
            all_paths_ok = False
            continue

        # 检查二：如果要求，路径是否已添加到 PATH 环境变量
        if must_be_in_path:
            normalized_path_to_check = str(full_path).lower()
            if normalized_path_to_check in path_entries_set:
                results.append(f"✅ [{description}] 配置正确 (路径存在且已在 PATH 中)")
            else:
                results.append(f"❌ [{description}] 配置缺失 (路径存在，但未添加到系统 PATH)")
                results.append(f"   - 建议: 将此目录添加到 PATH 环境变量 -> {full_path}")
                all_paths_ok = False
        else:
            results.append(f"✅ [{description}] 路径存在: {full_path}")

    # 4. 输出最终结论
    results.append("-" * 40)
    if all_paths_ok:
        results.append("🎉 恭喜！所有必要的鸿蒙开发环境变量均已正确配置！")
    else:
        results.append("⚠️ 部分环境变量配置不完整或缺失，请根据上面的提示进行修复。")

    return results